let http = require('http');
let path = require('path');
let multiparty = require('multiparty');//接收 文件的包
let fse = require('fs-extra');//处理文件目录 存储 创建文件夹

//node 服务器
//1:搭建server服务器
const server = http.createServer();

//监听请求
server.on("request", async (req, res) => {
  //设置响应头 解决跨域问题 cors
  res.setHeader("Access-control-Allow-Origin", '*');//*:任何域名都可以访问后台
  res.setHeader("Access-control-Allow-Headers", '*');
  //
  // if (req.method === 'OPTIONS') {//get post
  //   //探测帧请求
  //   res.status = 200;
  //   res.end();
  //   return;
  // }

  //接收文件 formData
  if (req.url === '/') {
    //前端 formData
    //1:new multiparty.Form();生成文件解析对象
    const multipart = new multiparty.Form();
    //2:文件解析
    multipart.parse(req, async (err, fields, files) => {
      if (err) {//错误
        return
      }
      //files {} 没有传文件  fields:文件的属性 name

      const [chunk] = files.chunk;
      const [hash] = fields.hash;

      // console.log(fields.filename);
      const [filename] = fields.filename;

      // 把当前的文件 放到一个位置 ../target中
      const chunkDir = path.resolve(path.resolve(__dirname, '..', 'target'), filename);

      //文件夹是否存在
      if (!fse.pathExistsSync(chunkDir)) {
        await fse.mkdirs(chunkDir);//创建文件夹之后 再往后操作
      }

      //存储到这个文件夹中
      await fse.move(chunk.path, `${chunkDir}/${hash}`); //先放到内存中 当调用move 把内存中的文件 存储到文件夹中

      //1:获取传递过来的文件
      //2:存储到服务器
      //  fse 处理文件 创建一个文件夹
      //  文件夹存储 存进去 不存在 创建
      //  存储文件
      res.end('received file success');
    });
  }
  if (req.url === '/merge') {
    //合并
  }

});

server.listen(3000, () => {
  console.log('正在监听端口号 3000');
});

